<?php

// группы доступа
defined('ACCESS_GROUP_ADMIN') or define('ACCESS_GROUP_ADMIN', 1); // администратор
defined('ACCESS_GROUP_DIRECTOR_OF_STUDIES') or define('ACCESS_GROUP_DIRECTOR_OF_STUDIES', 2); // завуч
defined('ACCESS_GROUP_ASSISTANT') or define('ACCESS_GROUP_ASSISTANT', 4); // заместитель по потоку
defined('ACCESS_GROUP_EDUCATOR') or define('ACCESS_GROUP_EDUCATOR', 8); // воспитатель
defined('ACCESS_GROUP_SECRETARY_OF_THE_DEPARTMENT') or define('ACCESS_GROUP_SECRETARY_OF_THE_DEPARTMENT', 16); // секретарь кафедры
defined('ACCESS_GROUP_TEACHER') or define('ACCESS_GROUP_TEACHER', 32); // преподаватель
defined('ACCESS_GROUP_DEPUTY_DIRECTOR_FOR_ACADEMIC_AFFAIRS') or define('ACCESS_GROUP_DEPUTY_DIRECTOR_FOR_ACADEMIC_AFFAIRS', 64); // заместитель директора по учебной работе
defined('ACCESS_GROUP_BOOKKEEPER') or define('ACCESS_GROUP_BOOKKEEPER', 128); // бухгалтер
defined('ACCESS_GROUP_HEALTH_WORKER') or define('ACCESS_GROUP_HEALTH_WORKER', 256); // медицинский работник
defined('ACCESS_GROUP_LIBRARIAN') or define('ACCESS_GROUP_LIBRARIAN', 512); // библиотекарь

class authentication {
	
	private $user_id = 0;
	
	private $access_list = array();
	
	function __construct($user_id) {
		$this->set_user_id($user_id);
		$this->init_access_list();
		$this->init_user_access();
	}
	
	function set_user_id($user_id) {
		if ($user_id != 0) {
			$this->user_id = $user_id;
		} else {
			$this->access_denied();
		}
	}
	
	function access_denied() {
		global $CFG;
		include_once($CFG->lib_dir . '/views/class.view.php');
		$view = new view(
			__DIR__ . '/views/access_denied.php'
		);
		$view->render();
		exit;
	}
	
	function init_access_list() {
		global $CFG;
		$this->access_list = include($CFG->app_dir . '/config/access_list.php');
	}
	
	function init_user_access() {
		if (isset($this->access_list[$this->user_id])) {
			$this->user_access = $this->access_list[$this->user_id];
		} else {
			$this->access_denied();
		}
	}
	
	/**
	 * Проверяет, есть ли доступ для пользователя
	 * @param int $access_code Права доступа к разделу
	 * @return bool
	 */
	function have_access($access_code) {
		for ($i = 0; $i < count($this->user_access['access_group']); $i++) {
			if ($this->user_access['access_group'][$i] & $access_code) {
				return true;
			}
		}
		return false;
	}
	
	/**
	 * Получить информацию о правах доступа пользователя
	 */
	function get_user_data() {
		return (isset($this->user_access['data'])) ? $this->user_access['data'] : NULL;
	}
	
	function __destruct() {
		
	}
}

?>
